const express=require('express')
const app=express()
app.use(express.json())
const {expressjwt: jwt}=require('express-jwt')//还原jwt为对象
const enjwt=require('jsonwebtoken')//生成jwt
const secretKey="mimayo~" //定义密钥




// 以/api/开头的不需要访问权限
// 自动把解析出来的数据挂载到req.auth的属性上
app.use(
    jwt({
        secret:secretKey,
        algorithms: ["HS256"],
    }).unless({path:[/^\/api\//]})
)

// 通过jsonwebtoken的sign方法加密
// 不要携带密码
app.post('/api/login',(req,res)=>{
    const user=req.body
    let {username,password}=user
    if(username!=='admin'||password!==123456){
        return res.send({status:200,msg:'账号或密码错误'})
    }
    // 登陆成功后，加密
    const tokenStr=enjwt.sign(
        {username},
        secretKey,
        {expiresIn:'10s'} //h
    )
    // 返回加密的token
    res.send({
        status:200,
        message:'登陆成功',
        token:tokenStr
    })
})

//有权限的api接口
app.get('/admin/getInfo',(req,res)=>{
    res.send({
        status:0,
        msg:'获取数据成功',
        data:req.auth
    })
})


// 错误中间件写后面
// 解析token错误或过期
app.use((err,req,res,next)=>{
    console.log(err)
    if(err.name==='UnauthorizedError'){
        res.send({
            status:401,
            msg:'token已过期'
        })
    }
    res.send({
        status:500,
        msg:'请求错误'
    })
})

app.listen(8080,()=>{
    console.log('你的服务器运行在：http://localhost:8080')
})